#ifndef _FONTS_MANAGER_H
#define _FONTS_MANAGER_H

typedef struct FontBitMap{
    int iXLeft; //位图左上角x坐标
    int iYTop;  //位图左上角Y坐标
    int iXMax;  //位图的最大X坐标值
    int iYMax;  //位图的最大Y坐标值
    int iBpp;   //一个像素用多少位表示
    int iPitch; //对于单位图，两行像素之间的跨度
    int iCurOriginX;    //位图原点X坐标
    int iCurOriginY;    //位图原点Y坐标
    int iNextOriginX;   //下一个字符即右边字符的原点X坐标
    int iNextOriginY;   //下一个字符即右边字符的原点Y坐标
    unsigned char *pucBuffer;   //存放字符的位图数据
}T_FontBitMap, *PT_FontBitMap;

typedef struct FontOpr{
    char *name; //字体模块名字
    int (*FontInit)(char *pcFontFile, unsigned int dwFontSize); //初始化函数
    int (*GetFontBitmap)(unsigned int dwCode, PT_FontBitMap ptFontBitMap);  //根据编码获得位图
    int (*SetFontSize)(unsigned int dwFontSize);    //设置字体尺寸
    struct FontOpr *ptNext;
}T_FontOpr, *PT_FontOpr;

// * 功能描述： 注册"字体模块", 所谓字体模块就是取出字符位图的方法
//  * 输入参数： ptFontOpr - 一个结构体,内含"取出字符位图"的操作函数
//  * 输出参数： 无
//  * 返 回 值： 0 - 成功, 其他值 - 失败
int RegisterFontOpr(PT_FontOpr ptFontOpr);

//  * 函数名称： ShowFontOpr
//  * 功能描述： 显示本程序能支持的"字体模块"
void ShowFontOpr(void);

//  * 功能描述： 调用各个字体模块的初始化函数
//  * 返 回 值： 0 - 成功, 其他值 - 失败
int FontsInit(void);

//  * 功能描述： 注册"ASCII字体模块"
//  * 返 回 值： 0 - 成功, 其他值 - 失败
int ASCIIInit(void);

//  * 功能描述： 注册"GBK字体模块"
//  * 返 回 值： 0 - 成功, 其他值 - 失败
int GBKInit(void);

//  * 功能描述： 注册"FreeType字体模块"
//  * 返 回 值： 0 - 成功, 其他值 - 失败
int FreeTypeInit(void);

//  * 功能描述： 根据名字取出指定的"字体模块"
//  * 输入参数： pcName - 名字
//  * 输出参数： 无
//  * 返 回 值： NULL   - 失败,没有指定的模块, 
//  *            非NULL - 字体模块的PT_FontOpr结构体指针
PT_FontOpr GetFontOpr(char *pcName);

//  * 功能描述： 设置字符的尺寸(单位:色素)
//  * 输入参数： dwFontSize - 字符的尺寸(单位:色素)
unsigned int GetFontSize(void);

//  * 功能描述： 获得字符的位图
//  * 输入参数： dwCode       - 字符的编码值(可能是ASCII/GBK/UNICODE)
//  * 输出参数： ptFontBitMap - 内含位图信息
//  * 返 回 值： 0  - 成功
//  *            -1 - 失败 
int GetFontBitmap(unsigned int dwCode, PT_FontBitMap ptFontBitMap);

//  * 功能描述： 设置字体模块的信息,比如指定字库文件,指定字符尺寸
//  * 输入参数： pcFontsName - 要设置的字体模块的名字
//  *            pcFontsFile - 字库文件
//  *            dwFontSize  - 字符的尺寸(单位:色素), 程序运行时可用SetFontSize修改
//  * 输出参数： 无
//  * 返 回 值： 0      - 成功
//  *            其他值 - 失败
int SetFontDetail(char* pcFontsName, char *pcFontFile, unsigned int dwFontSize);

#endif /* _FONTS_MANAGER_H */